/**
 * 测试，值传递与引用传递的区别
 */
public class Test {
    static int a = 5;
    static String str = "abc";
    static int[] arr = {1,2,3};
    static char[] chars = {'a','b','c'};

    public static void main(String[] args) {
        //输出原本全局变量
        System.out.println(a);//5
        //调用方法
        and(a,5);//10
        //输出原本全局变量
        System.out.println(a);//5
        System.out.println("----------------------");

        //输出原本全局变量
        System.out.println(str);//abc
        //调用方法
        andObject(str,"def");//abcdef
        //输出原本全局变量
        System.out.println(str);//abc
        System.out.println("----------------------");

        System.out.println(arr[0]);//1
        andArray(arr,1);//2
        System.out.println(arr[0]);//2
        System.out.println("数组地址：" + arr);
        System.out.println("----------------------");

        System.out.println(chars);//字符数组，可以直接输出数组的内容，而不是数组地址

    }

    //测试值类型变量赋给形参
    public static void and(int a,int b){
        //值类型数据形参值改变，不会导致实参改变
        a = a + b;
        System.out.println("值类型形参：" + a);
    }

    //测试引用类型变量赋给形参
    public static void andObject(String str,String str2){
        //虽然
        str = str + str2;
        System.out.println("对象引用类型形参：" + str);
    }

    //测试引用类型变量赋给形参
    public static void andArray(int[] arrd,int a){
        arrd[0] = arrd[0] + a;
        System.out.println("数组引用类型形参：" + arrd[0]);
    }
}
